home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- import java.awt.event.AWTEventListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseWheelEvent;
- import java.io.Serializable;
- import java.security.AccessController;
- import sun.awt.AppContext;
- import sun.awt.DebugHelper;
- import sun.awt.SunToolkit;
- import sun.awt.dnd.SunDropTargetEvent;
-
- class LightweightDispatcher implements Serializable, AWTEventListener {
- private static final long serialVersionUID = 5184291520170872969L;
- private static final int LWD_MOUSE_DRAGGED_OVER = 1500;
- private static final DebugHelper dbg = DebugHelper.create(LightweightDispatcher.class);
- private Container nativeContainer;
- private Component focus;
- private transient Component mouseEventTarget;
- private transient Component targetLastEntered;
- private transient boolean isMouseInNativeContainer = false;
- private Cursor nativeCursor;
- private long eventMask;
- private static final long PROXY_EVENT_MASK = 131132L;
- private static final long MOUSE_MASK = 131120L;
-
- LightweightDispatcher(Container var1) {
- this.nativeContainer = var1;
- this.mouseEventTarget = null;
- this.eventMask = 0L;
- }
-
- void dispose() {
- this.stopListeningForOtherDrags();
- this.mouseEventTarget = null;
- }
-
- void enableEvents(long var1) {
- this.eventMask |= var1;
- }
-
- boolean dispatchEvent(AWTEvent var1) {
- boolean var2 = false;
- if (var1 instanceof SunDropTargetEvent) {
- SunDropTargetEvent var3 = (SunDropTargetEvent)var1;
- var2 = this.processDropTargetEvent(var3);
- } else {
- if (var1 instanceof MouseEvent && (this.eventMask & 131120L) != 0L) {
- MouseEvent var4 = (MouseEvent)var1;
- var2 = this.processMouseEvent(var4);
- }
-
- if (var1.getID() == 503) {
- this.nativeContainer.updateCursorImmediately();
- }
- }
-
- return var2;
- }
-
- private boolean isMouseGrab(MouseEvent var1) {
- int var2 = var1.getModifiersEx();
- if (var1.getID() == 501 || var1.getID() == 502) {
- switch (var1.getButton()) {
- case 1:
- var2 ^= 1024;
- break;
- case 2:
- var2 ^= 2048;
- break;
- case 3:
- var2 ^= 4096;
- }
- }
-
- return (var2 & 7168) != 0;
- }
-
- private boolean processMouseEvent(MouseEvent var1) {
- int var2 = var1.getID();
- Component var3 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), true);
- this.trackMouseEnterExit(var3, var1);
- if (!this.isMouseGrab(var1) && var2 != 500) {
- this.mouseEventTarget = var3 != this.nativeContainer ? var3 : null;
- }
-
- if (this.mouseEventTarget != null) {
- switch (var2) {
- case 500:
- if (var3 == this.mouseEventTarget) {
- this.retargetMouseEvent(var3, var2, var1);
- }
- break;
- case 501:
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- break;
- case 502:
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- break;
- case 503:
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- case 504:
- case 505:
- default:
- break;
- case 506:
- if (this.isMouseGrab(var1)) {
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- }
- break;
- case 507:
- DebugHelper var10000 = dbg;
- this.retargetMouseEvent(var3, var2, var1);
- }
-
- var1.consume();
- }
-
- return var1.isConsumed();
- }
-
- private boolean processDropTargetEvent(SunDropTargetEvent var1) {
- int var2 = var1.getID();
- int var3 = var1.getX();
- int var4 = var1.getY();
- if (!this.nativeContainer.contains(var3, var4)) {
- Dimension var5 = this.nativeContainer.getSize();
- if (var5.width <= var3) {
- var3 = var5.width - 1;
- } else if (var3 < 0) {
- var3 = 0;
- }
-
- if (var5.height <= var4) {
- var4 = var5.height - 1;
- } else if (var4 < 0) {
- var4 = 0;
- }
- }
-
- Component var6 = this.nativeContainer.getDropTargetEventTarget(var3, var4, true);
- this.trackMouseEnterExit(var6, var1);
- if (var6 != this.nativeContainer && var6 != null) {
- switch (var2) {
- case 504:
- case 505:
- break;
- default:
- this.retargetMouseEvent(var6, var2, var1);
- var1.consume();
- }
- }
-
- return var1.isConsumed();
- }
-
- private void trackMouseEnterExit(Component var1, MouseEvent var2) {
- Component var3 = null;
- int var4 = var2.getID();
- if (var2 instanceof SunDropTargetEvent && var4 == 504 && this.isMouseInNativeContainer) {
- this.targetLastEntered = null;
- } else if (var4 != 505 && var4 != 506 && var4 != 1500 && !this.isMouseInNativeContainer) {
- this.isMouseInNativeContainer = true;
- this.startListeningForOtherDrags();
- } else if (var4 == 505) {
- this.isMouseInNativeContainer = false;
- this.stopListeningForOtherDrags();
- }
-
- if (this.isMouseInNativeContainer) {
- var3 = var1;
- }
-
- if (this.targetLastEntered != var3) {
- if (this.targetLastEntered != null) {
- this.retargetMouseEvent(this.targetLastEntered, 505, var2);
- }
-
- if (var4 == 505) {
- var2.consume();
- }
-
- if (var3 != null) {
- this.retargetMouseEvent(var3, 504, var2);
- }
-
- if (var4 == 504) {
- var2.consume();
- }
-
- this.targetLastEntered = var3;
- }
- }
-
- private void startListeningForOtherDrags() {
- AccessController.doPrivileged(new 1(this));
- }
-
- private void stopListeningForOtherDrags() {
- AccessController.doPrivileged(new 2(this));
- }
-
- public void eventDispatched(AWTEvent var1) {
- boolean var2 = var1 instanceof MouseEvent && !(var1 instanceof SunDropTargetEvent) && var1.id == 506 && var1.getSource() != this.nativeContainer;
- if (var2) {
- MouseEvent var3 = (MouseEvent)var1;
- MouseEvent var4;
- synchronized(this.nativeContainer.getTreeLock()) {
- Component var6 = var3.getComponent();
- if (!var6.isShowing()) {
- return;
- }
-
- Container var7;
- for(var7 = this.nativeContainer; var7 != null && !(var7 instanceof Window); var7 = ((Component)var7).getParent_NoClientCode()) {
- }
-
- if (var7 == null || ((Window)var7).isModalBlocked()) {
- return;
- }
-
- var4 = new MouseEvent(this.nativeContainer, 1500, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var3.getX(), var3.getY(), var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), var3.getButton());
- ((AWTEvent)var3).copyPrivateDataInto(var4);
- Point var8 = var6.getLocationOnScreen();
- if (AppContext.getAppContext() != this.nativeContainer.appContext) {
- 3 var10 = new 3(this, var4, var8);
- SunToolkit.executeOnEventHandlerThread(this.nativeContainer, var10);
- return;
- }
-
- if (!this.nativeContainer.isShowing()) {
- return;
- }
-
- Point var9 = this.nativeContainer.getLocationOnScreen();
- var4.translatePoint(var8.x - var9.x, var8.y - var9.y);
- }
-
- Component var5 = this.nativeContainer.getMouseEventTarget(var4.getX(), var4.getY(), true);
- this.trackMouseEnterExit(var5, var4);
- }
- }
-
- void retargetMouseEvent(Component var1, int var2, MouseEvent var3) {
- if (var1 != null) {
- int var4 = var3.getX();
- int var5 = var3.getY();
-
- Object var6;
- for(var6 = var1; var6 != null && var6 != this.nativeContainer; var6 = ((Component)var6).getParent()) {
- var4 -= ((Component)var6).x;
- var5 -= ((Component)var6).y;
- }
-
- if (var6 != null) {
- Object var7;
- if (var3 instanceof SunDropTargetEvent) {
- var7 = new SunDropTargetEvent(var1, var2, var4, var5, ((SunDropTargetEvent)var3).getDispatcher());
- } else if (var2 == 507) {
- var7 = new MouseWheelEvent(var1, var2, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var4, var5, var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), ((MouseWheelEvent)var3).getScrollType(), ((MouseWheelEvent)var3).getScrollAmount(), ((MouseWheelEvent)var3).getWheelRotation());
- } else {
- var7 = new MouseEvent(var1, var2, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var4, var5, var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), var3.getButton());
- }
-
- ((AWTEvent)var3).copyPrivateDataInto((AWTEvent)var7);
- if (var1 == this.nativeContainer) {
- ((Container)var1).dispatchEventToSelf((AWTEvent)var7);
- } else {
- assert AppContext.getAppContext() == var1.appContext;
-
- if (this.nativeContainer.modalComp != null) {
- if (((Container)this.nativeContainer.modalComp).isAncestorOf(var1)) {
- var1.dispatchEvent((AWTEvent)var7);
- } else {
- var3.consume();
- }
- } else {
- var1.dispatchEvent((AWTEvent)var7);
- }
- }
- }
-
- }
- }
-
- // $FF: synthetic method
- static Container access$000(LightweightDispatcher var0) {
- return var0.nativeContainer;
- }
-
- // $FF: synthetic method
- static void access$100(LightweightDispatcher var0, Component var1, MouseEvent var2) {
- var0.trackMouseEnterExit(var1, var2);
- }
- }
-